﻿#pragma once

#include <QString>
#include <QMap>
#include <QVariant>
#include <QColor>

class ThemeManager : public QObject {
    Q_OBJECT
public:
    static ThemeManager& GetInstance();

    // 主题类型
    enum Theme {
        Light = 0,      // 白色主题
        Dark = 1        // 深色主题
    };

    // 设置当前主题
    void setTheme(Theme theme);
    Theme currentTheme() const { return m_currentTheme; }

    // 获取主题颜色
    QColor getColor(const QString& key) const;

    // 获取样式表
    QString getMainWindowStyle() const;
    QString getMenuBarStyle() const;
    QString getMenuStyle() const;
    QString getStatusBarStyle() const;
    QString getSplitterStyle() const;
    QString getSideBarStyle() const;
    QString getSearchBoxStyle() const;
    QString getPrimaryButtonStyle() const;
    QString getSecondaryButtonStyle() const;
    QString getCodeEditorStyle() const;

    // 自定义主题接口
    void setCustomColor(const QString& key, const QColor& color);
    void setCustomValue(const QString& key, const QVariant& value);

    // 主题名称
    QString themeName() const;

signals:
	void themeChanged(Theme newTheme);

private:
    ThemeManager();
    void initializeThemes();
    void initializeLightTheme();
    void initializeDarkTheme();

    QString getValue(const QString& key) const;

private:
    Theme m_currentTheme = Theme::Light;
    QMap<QString, QVariant> m_themeData;
};